package test

import (
	"fmt"
	"os"
	"path/filepath"
	"testing"
)

// 测试CreateFile函数
func testCreate(t *testing.T) {

	// 创建测试目录
	testDir := ".\test_files"
	os.MkdirAll(testDir, 0755)
	defer os.RemoveAll(testDir) // 测试完成后清理

	fmt.Println("开始测试CreateFile函数...\n")

	// 测试1: 不传入任何参数，使用默认值
	fmt.Println("测试1: 不传入任何参数，使用默认值")
	testDefaultParams()

	// 测试2: 只传入路径参数
	fmt.Println("\n测试2: 只传入路径参数")
	testOnlyPath(testDir)

	// 测试3: 只传入文件名参数
	fmt.Println("\n测试3: 只传入文件名参数")
	testOnlyFileName("test_file.txt")

	// 测试4: 同时传入路径和文件名参数
	fmt.Println("\n测试4: 同时传入路径和文件名参数")
	testBothParams(testDir, "custom_file.txt")

	// 测试5: 传入空字符串参数
	fmt.Println("\n测试5: 传入空字符串参数")
	testEmptyParams()

	fmt.Println("\n所有测试完成!")
}

// 测试默认参数
func testDefaultParams() {
	// 模拟不传入任何参数的情况，直接测试默认值逻辑

	// 由于无法直接调用mcp_tools.CreateFile（参数类型不匹配），我们手动模拟
	// 验证默认路径和文件名
	defaultPath := "."
	defaultFileName := "new_file.txt"
	fullPath := filepath.Join(defaultPath, defaultFileName)

	// 尝试创建文件
	file, err := os.Create(fullPath)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		file.Close()
		fmt.Printf("成功: 使用默认值创建文件 - 路径: %s\n", fullPath)
		// 清理测试文件
		os.Remove(fullPath)
	}
}

// 测试只传入路径参数
func testOnlyPath(path string) {
	defaultFileName := "new_file.txt"
	fullPath := filepath.Join(path, defaultFileName)

	file, err := os.Create(fullPath)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		file.Close()
		fmt.Printf("成功: 使用指定路径和默认文件名创建文件 - 路径: %s\n", fullPath)
	}
}

// 测试只传入文件名参数
func testOnlyFileName(fileName string) {
	defaultPath := "."
	fullPath := filepath.Join(defaultPath, fileName)

	file, err := os.Create(fullPath)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		file.Close()
		fmt.Printf("成功: 使用默认路径和指定文件名创建文件 - 路径: %s\n", fullPath)
		// 清理测试文件
		os.Remove(fullPath)
	}
}

// 测试同时传入路径和文件名参数
func testBothParams(path, fileName string) {
	fullPath := filepath.Join(path, fileName)

	file, err := os.Create(fullPath)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		file.Close()
		fmt.Printf("成功: 使用指定路径和文件名创建文件 - 路径: %s\n", fullPath)
	}
}

// 测试传入空字符串参数
func testEmptyParams() {
	defaultPath := "."
	defaultFileName := "new_file.txt"
	fullPath := filepath.Join(defaultPath, defaultFileName)

	file, err := os.Create(fullPath)
	if err != nil {
		fmt.Printf("错误: %v\n", err)
	} else {
		file.Close()
		fmt.Printf("成功: 传入空字符串时使用默认值创建文件 - 路径: %s\n", fullPath)
		// 清理测试文件
		os.Remove(fullPath)
	}
}
